Storage networks are commercially available for storing large volumes of data on various types of storage devices, such as, e.g., RAID (Redundant Array of Independent Disks) and SAN (storage area network) disk arrays. By their nature, storage networks may be accessed simultaneously by many different users to process multiple Input/Output (IO) jobs. IO jobs are typically held in a queue at the storage device and processed, e.g., in the order received. When the queue is full, the storage device may issue a message (e.g., BUSY or QFULL) requesting that the host wait before retrying an IO job so that the storage device is able to process IO jobs already in the queue.
Heterogeneous storage networks are commonly designed to operate with a wide variety of different host platforms, operating systems, host bus adapters (HBAs), and storage devices from different vendors. Each host platform may be designed to respond differently to messages issued by the storage device. For example, while some hosts may respond to a BUSY message by waiting before retrying an IO job, another host may respond to a BUSY message by immediately retrying an IO job and causing the storage network to crash.
Although storage device vendors may work with vendors for each of the different host platforms and attempt to reach agreement upon standards, this can be a time-consuming and expensive process and may have implementation issues, and still does not resolve legacy support issues. In addition, each vendor often has other issues to address with their platform and may be unwilling to invest time and money into resolving network storage issues. Therefore, the burden falls on the network architect to design storage networks that function with a wide variety of different host platforms.